import java.util.Scanner;
import java.util.Arrays;
public class text1 {
    /*给你两个正整数数组 spells 和 potions ，长度分别为 n 和 m ，
    其中 spells[i] 表示第 i 个咒语的能量强度，potions[j] 表示第 j 瓶药水的能量强度。
    同时给你一个整数 success 。一个咒语和药水的能量强度 相乘 如果 大于等于 success ，
    那么它们视为一对 成功 的组合。
    请你返回一个长度为 n 的整数数组 pairs，其中 pairs[i] 是能跟第 i 个咒语成功组合的 药水 数目。*/
    public static int[]seek(int[]spells,int[]potions,long success) {
        Arrays.sort(potions);
       int n=spells.length;
       int[]arr=new int[n];
       int m=potions.length;
       for(int i=0;i<n;i++){
           int left=0;
           int right=m-1;
           int spell=spells[i];
           while(left<=right){
               int mid=left+(right-left)/2;
               if((long)spell*potions[mid]>=success)
                   right=mid-1;
               else
                   left=mid+1;
           }
           arr[i]=m-left;
       }
       return arr;
    }
    //双重循环时间复杂度为O(n2);会超时，需要进一步优化使用二分查找
   /* public static int[]seek(int[]spell,int[]potions,long success) {
         int n=spell.length;
         int m=potions.length;
         int[]arr=new int[n];
         for(int i=0;i<n;i++){
             int count=0;//组合数
             for(int j=0;j<m;j++){
                 if(spell[i]*potions[j]>=success){
                     count++;
                 }
             }
             arr[i]=count;
         }
         return arr;
    }*/
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        long success=sc.nextLong();
        int[] spell = new int[n];
        int[] potions=new int[m];
        for(int i=0;i<n;i++){
            spell[i]=sc.nextInt();
        }
        for(int i=0;i<m;i++){
            potions[i]=sc.nextInt();
        }
        int[]pairs=seek(spell,potions,success);
        System.out.println(Arrays.toString(pairs));
    }
}
